/*
 * stepper.h
 *
 *  Created on: Jan 28, 2025
 *      Author: wzx05
 */

#ifndef INC_MOTOR_STEPPER_H_
#define INC_MOTOR_STEPPER_H_

#define STEPPER_DRIVER_VER "0.0.1"
#define STEPPER_DRIVER_DATE "2025-02-01"

#include <Motor/stepper_types.h>
#include <Motor/stepper_group.h>


// 系统全局初始化：初始化所有电机和硬件资源
void Stepper_GlobalInit(const MotorSpec* motor_spec);

// 单电机控制接口
void Stepper_MoveToAngle(uint8_t group, uint8_t motor, float degrees);
void Stepper_Rotate(uint8_t group, uint8_t motor, float degrees); // 可用于相对旋转（待实现）
void Stepper_Home(uint8_t group, uint8_t motor);                // 单电机归零（待实现）

// 定时器中断调用：更新所有电机组状态
void Stepper_UpdateAllGroups(void);

// 定时器中断调用：更新所有电机组配套GPIO的输出状态（用于非阻塞控制GPIO脉宽）
void Stepper_UpdateAllGroupTransfer(void);


// 状态查询接口
bool Stepper_IsBusy(uint8_t group, uint8_t motor);  // 判断是否正在运动
int32_t Stepper_GetCurrentSteps(uint8_t group, uint8_t motor);
float Stepper_GetCurrentAngle(uint8_t group, uint8_t motor);


#endif /* INC_MOTOR_STEPPER_H_ */
